<!DOCTYPE html>


<html lang="zh-CN">


<head>
  <meta charset="utf-8" />
    
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
  <title>
    IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理.md |  
  </title>
  <meta name="generator" content="hexo-theme-ayer">
  
  <link rel="shortcut icon" href="/favicon.ico" />
  
  
<link rel="stylesheet" href="/dist/main.css">

  
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/Shen-Yu/cdn/css/remixicon.min.css">

  
<link rel="stylesheet" href="/css/custom.css">

  
  
<script src="https://cdn.jsdelivr.net/npm/pace-js@1.0.2/pace.min.js"></script>

  
  

  

</head>

</html>

<body>
  <div id="app">
    
      
    <main class="content on">
      <section class="outer">
  <article
  id="post-interview/IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理"
  class="article article-type-post"
  itemscope
  itemprop="blogPost"
  data-scroll-reveal
>
  <div class="article-inner">
    
    <header class="article-header">
       
<h1 class="article-title sea-center" style="border-left:0" itemprop="name">
  IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理.md
</h1>
 

    </header>
     
    <div class="article-meta">
      <a href="/2020/11/11/interview/IT%E8%BF%90%E7%BB%B4%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1%E3%80%81%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E3%80%81%E8%99%9A%E6%8B%9F%E5%B9%B3%E5%8F%B0%E5%92%8C%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/" class="article-date">
  <time datetime="2020-11-10T16:00:00.000Z" itemprop="datePublished">2020-11-11</time>
</a> 
  <div class="article-category">
    <a class="article-category-link" href="/categories/interview/">interview</a>
  </div>
  
<div class="word_count">
    <span class="post-time">
        <span class="post-meta-item-icon">
            <i class="ri-quill-pen-line"></i>
            <span class="post-meta-item-text"> 字数统计:</span>
            <span class="post-count">5.7k</span>
        </span>
    </span>

    <span class="post-time">
        &nbsp; | &nbsp;
        <span class="post-meta-item-icon">
            <i class="ri-book-open-line"></i>
            <span class="post-meta-item-text"> 阅读时长≈</span>
            <span class="post-count">20 分钟</span>
        </span>
    </span>
</div>
 
    </div>
      
    <div class="tocbot"></div>




  
    <div class="article-entry" itemprop="articleBody">
       
  <h1 id="IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理"><a href="#IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理" class="headerlink" title="IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理"></a>IT运维面试问题总结-基础服务、磁盘管理、虚拟平台和系统管理</h1><h2 id="基础服务"><a href="#基础服务" class="headerlink" title="基础服务"></a>基础服务</h2><h3 id="简述Linux中常见的系统服务，其作用分别是？"><a href="#简述Linux中常见的系统服务，其作用分别是？" class="headerlink" title="简述Linux中常见的系统服务，其作用分别是？"></a>简述Linux中常见的系统服务，其作用分别是？</h3><p>常见的系统服务及其作用有：</p>
<ul>
<li>NTP/Chrony：用于时钟同步；</li>
<li>DHCP：动态主机配置协议，用于自动分配主机地址，默认使用UDP 63端口；</li>
<li>DNS：域名解析，运行在UDP协议之上，默认使用53端口；</li>
<li>NFS：网络文件系统，依赖于RCP协议，其基本原则是“容许不同的客户端及服务端通过一组RPC分享相同的文件系统”，它是独立于操作系统，容许不同硬件及操作系统的系统共同进行文件的分享。</li>
<li>Postfix：邮件服务；</li>
<li>rsync：远程数据备份服务。</li>
<li>VPN：虚拟专用网。</li>
</ul>
<blockquote>
<p>更多服务参考：<a target="_blank" rel="noopener" href="http://c.biancheng.net/view/1059.html%E3%80%82">http://c.biancheng.net/view/1059.html。</a></p>
</blockquote>
<h3 id="简述FTP主要的工作模式？"><a href="#简述FTP主要的工作模式？" class="headerlink" title="简述FTP主要的工作模式？"></a>简述FTP主要的工作模式？</h3><p>FTP工作模式是以服务端角度来区分，有主动模式和被动模式。</p>
<ul>
<li>主动模式是指由FTP服务端主动向客户端发起连接，服务端端口号为20（用于传输）和21（用于控制），即20端口向客户端的一个大于1024的随机端口传输数据；</li>
<li>被动模式是指由FTP客户端向服务端发起连接，服务端采用随机端口等待客户端的随机端口来访问，从而传输数据。</li>
</ul>
<h3 id="简述FTP两种登录方式以及两种传输模式？"><a href="#简述FTP两种登录方式以及两种传输模式？" class="headerlink" title="简述FTP两种登录方式以及两种传输模式？"></a>简述FTP两种登录方式以及两种传输模式？</h3><ul>
<li>FTP有两种登录方式：匿名登录和授权登录。</li>
</ul>
<p>使用匿名登录时，用户名为：anonymous，密码为：任何合法email地址；使用授权登录时，用户名为用户在远程FTP系统中的用户帐号，密码为用户在远程系统中的用户密码。</p>
<p><code>区别</code>：使用匿名登录只能访问FTP目录下的资源，默认配置下只能下载；而授权登录访问的权限大于匿名登录，且上载、下载均可。</p>
<ul>
<li>FTP文件传输有两种文件传输模式：ASCII模式和binary模式。</li>
</ul>
<p>ASCII模式用来传输文本文件；其他文件的传输使用binary模式。</p>
<h3 id="简述DHCP的流程？"><a href="#简述DHCP的流程？" class="headerlink" title="简述DHCP的流程？"></a>简述DHCP的流程？</h3><p>新节点通过DHCP获取地址信息的主要流程有如下四个过程：</p>
<p>1、寻找DHCP Server</p>
<p>客户机第一次登录网络的时，向网络上发出一个DHCPDISCOVER广播（包中包含客户机的MAC地址和计算机名等信息）。其源地址为0.0.0.0，目标地址为255.255.255.255。</p>
<p>2、提供IP地址租用</p>
<p>服务端监听到客户机发出的DHCP discover广播后，从剩余地址池中选择最前面的空置IP，连同其它TCP/IP设定，通过广播方式响应给客户端一个DHCP OFFER数据包（包中包含IP地址、子网掩码、地址租期等信息）。源IP地址为DHCP Server的IP地址，目标地址为255.255.255.255。同时，DHCP Server为此客户保留它提供的IP地址，从而不会为其他DHCP客户分配此IP地址。</p>
<p>3、接受IP租约</p>
<p>客户机挑选最先响应的DHCP OFFER（一般是最先到达的那个），同时向网络广播DHCP REQUEST数据包（包中包含客户端的MAC地址、接受的租约中的IP地址、提供此租约的DHCP服务器地址等），声明将接受某一台服务器提供的IP地址。此时，由于还没有得到DHCP Server的最后确认，客户端仍然使用0.0.0.0为源IP地址，255.255.255.255为目标地址进行广播。</p>
<p>4、租约确认</p>
<p>服务端接收到客户端的DHCP REQUEST之后，会广播返回给客户机一个DHCP ACK消息包，表明已经接受客户机的选择，并将这一IP地址的合法租用以及其他的配置信息都放入该广播包发给客户机。</p>
<p>客户机在接收到DHCP ACK广播后，会向网络发送三个针对此IP地址的ARP解析请求以执行冲突检测，查询网络上有没有其它机器使用该IP地址；如果发现该IP地址已经被使用，客户机会发出一个DHCP DECLINE数据包给DHCP Server，拒绝此IP地址租约，并重新发送DHCP discover信息。此时，在DHCP服务器管理控制台中，会显示此IP地址为BAD_ADDRESS。</p>
<p>如果网络上没有其它主机使用此IP地址，则客户机的TCP/IP使用租约中提供的IP地址完成初始化，从而可以和其他网络中的主机进行通讯。</p>
<h3 id="简述DNS查询可能需要哪些过程？"><a href="#简述DNS查询可能需要哪些过程？" class="headerlink" title="简述DNS查询可能需要哪些过程？"></a>简述DNS查询可能需要哪些过程？</h3><p>通常DNS查询有如下过程，任何一过程查询成功则返回查询结果，不再进行下一步查询：</p>
<ul>
<li>1、用户输入网址，优先调取本地hosts查询记录；</li>
<li>2、使用本地dns缓存查询记录；</li>
<li>3、使用网络设置的主dns查询记录；</li>
<li>4、使用dns服务器中的缓存；</li>
<li>5、dns服务器转发查询，转发至上一级ISP DNS服务器，依次循环；</li>
<li>6、若dns服务器未配置转发查询，则将查询需求发至13台根dns；</li>
<li>7、返回查询IP结果给客户端。</li>
</ul>
<h3 id="简述DNS常见的服务器角色类型？"><a href="#简述DNS常见的服务器角色类型？" class="headerlink" title="简述DNS常见的服务器角色类型？"></a>简述DNS常见的服务器角色类型？</h3><ul>
<li>缓冲域名服务器</li>
<li>主域名服务器</li>
<li>从域名服务器</li>
</ul>
<h3 id="简述NFS文件系统及其作用？"><a href="#简述NFS文件系统及其作用？" class="headerlink" title="简述NFS文件系统及其作用？"></a>简述NFS文件系统及其作用？</h3><p>网络文件系统是应用层的一种应用服务，它主要应用于Linux和Linux系统、Linux和Unix系统之间的文件或目录的共享。对于用户而言可以通过NFS方便的访问远地的文件系统，使之成为本地文件系统的一部分。采用NFS之后省去了登录的过程，方便了用户访问系统资源。</p>
<h3 id="简述Samba作用及其使用场景？"><a href="#简述Samba作用及其使用场景？" class="headerlink" title="简述Samba作用及其使用场景？"></a>简述Samba作用及其使用场景？</h3><p>Samba是在Linux上实现SMB协议的一个免费软件，由服务器及客户端程序构成。SMB（Server Messages Block，信息服务块）是一种在局域网上共享文件和打印机的一种通信协议，它为局域网内的不同计算机之间提供文件及打印机等资源的共享服务。SMB协议是客户机/服务器型协议，客户机通过该协议可以访问服务器上的共享文件系统、打印机及其他资源。主要用于windows与Linux之间的文件共享。</p>
<h3 id="简述VPN概念以及常见的类型？"><a href="#简述VPN概念以及常见的类型？" class="headerlink" title="简述VPN概念以及常见的类型？"></a>简述VPN概念以及常见的类型？</h3><p>VPN是指在公共的网络上建立专用网络的技术，但是两个节点间并没有物理上的专用的端到端链路，而是通过广域网或者运营商提供的网络平台之上的逻辑网络，用户数据在逻辑链路中传输，同时VPN采用身份验证和加密技术，充分保证了安全性。常见的VPN有：IPSec VPN、PPTP VPN、L2TP VPN、SSL VPN。</p>
<h3 id="简述YUM服务工作步骤？"><a href="#简述YUM服务工作步骤？" class="headerlink" title="简述YUM服务工作步骤？"></a>简述YUM服务工作步骤？</h3><p>客户端在通过yum安装软件时，会先访问repo仓库，下载仓库的元数据，根据元数据去查询所需要的rpm及其各种依赖关系。之后再在仓库进行相关下载，并自动解决rpm包的依赖关系。同时repo仓库应该是一个文件服务器，一般linux主机在下载过元数据的同时会将其保留在缓存中，以便后续使用。本质上是将底层的物理硬盘抽象的封装起来，然后以逻辑卷的方式呈现给上层应用。</p>
<h2 id="磁盘管理"><a href="#磁盘管理" class="headerlink" title="磁盘管理"></a>磁盘管理</h2><h3 id="简述LVM概念及其特点？"><a href="#简述LVM概念及其特点？" class="headerlink" title="简述LVM概念及其特点？"></a>简述LVM概念及其特点？</h3><p>LVM是对磁盘分区进行管理的一种机制，建立在硬盘和分区之上的一个逻辑层，用来提高磁盘管理的灵活性。通过LVM可将若干个磁盘分区连接为一个整块的卷组(Volume Group)，形成一个存储池。可以在卷组上随意创建逻辑卷(Logical Volumes)，并进一步在逻辑卷上创建文件系统，与直接使用物理存储在管理上相比，提供了更好灵活性。</p>
<ul>
<li><p>设计概念</p>
</li>
<li><ul>
<li>物理存储介质（The physical media）：LVM存储介质可以是磁盘分区、整个磁盘、RAID阵列或SAN磁盘，设备必须初始化为LVM物理卷，才能与LVM结合使用；</li>
<li>物理卷PV（physical volume）：物理卷就是LVM的基本存储逻辑块，但和基本的物理存储介质（如分区、磁盘等）比较，却包含有与LVM相关的管理参数，创建物理卷它可以用硬盘分区，也可以用硬盘本身；</li>
<li>卷组VG（Volume Group）：一个LVM卷组由一个或多个物理卷组成；</li>
<li>逻辑卷LV（logical volume）：LV建立在VG之上，可以在LV之上建立文件系统；</li>
<li>PE（physical extents）：PV物理卷中可以分配的最小存储单元，PE的大小是可以指定的，默认为4MB；</li>
<li>LE（logical extent）：LV逻辑卷中可以分配的最小存储单元，在同一个卷组中，LE的大小和PE是相同的，并且一一对应。</li>
</ul>
</li>
<li><p>特点</p>
</li>
<li><ul>
<li>在从卷组中移除一个磁盘的时候必须使用reducevg命令，有一定的限制：这个命令要求root权限，并且不允许在快照卷组中使用。</li>
<li>当卷组中的一个磁盘损坏时，整个卷组都会受到影响。</li>
<li>因为加入了额外的操作，存储性能受到影响。</li>
<li>可以在系统运行的状态下动态的扩展文件系统的大小。</li>
<li>文件系统可以跨多个磁盘，因此文件系统大小不会受物理磁盘的限制。</li>
<li>可以增加新的磁盘到LVM的存储池中。</li>
<li>可以以镜像的方式冗余重要的数据到多个物理磁盘。</li>
<li>可以方便的导出整个卷组到另外一台机器。</li>
<li>优点</li>
<li>缺点</li>
</ul>
</li>
</ul>
<h3 id="简述RAID0、RAID1、RAID5原理及特点、使用场景？"><a href="#简述RAID0、RAID1、RAID5原理及特点、使用场景？" class="headerlink" title="简述RAID0、RAID1、RAID5原理及特点、使用场景？"></a>简述RAID0、RAID1、RAID5原理及特点、使用场景？</h3><p>RAID通常可以把硬盘整合成一个大磁盘，然后在大磁盘上再分区，提高数据量利用率、冗余性，根据其特点不同，常见的有RAID0、RADI1、RAID5。</p>
<p>RAID 0：指由多个盘组合成逻辑上的一个盘。</p>
<ul>
<li>优点：读写快，容量利用率最高。</li>
<li>缺点：没有冗余，任何一块磁盘失效将影响到所有数据。</li>
</ul>
<p>RAID 1：偶数盘，进行镜像。</p>
<ul>
<li>优点：最高的冗余性。</li>
<li>缺点：浪费资源，成本高，数据利用率低。</li>
</ul>
<p>RAID 5：奇数盘，至少3块磁盘。分布式奇偶校验的独立磁盘结构，它的奇偶校验码存在于所有磁盘上 任何一个硬盘损坏，都可以根据其它硬盘上的校验位来重建损坏的数据。</p>
<ul>
<li>优点：实现数据一定程度的冗余，同时也提升数据的读写性能。</li>
<li>缺点：构建此模式需要一定数量的磁盘。</li>
</ul>
<p>冗余从好到坏：RAID 1 &gt; RAID 10 &gt; RAID 5 &gt; RAID 0</p>
<p>性能从好到坏：RAID 0 &gt; RAID 10 &gt; RAID 5 &gt; RAID 1</p>
<p>成本从低到高：RAID 0 &gt; RAID 5 &gt; RAID 1 &gt; RAID 10</p>
<h3 id="简述iSCSI存储及其优点？"><a href="#简述iSCSI存储及其优点？" class="headerlink" title="简述iSCSI存储及其优点？"></a>简述iSCSI存储及其优点？</h3><p>iSCSI是Internet小型计算机系统接口，是一个基于TCP/IP的协议，用于通过IP网络仿真SCSI高性能本地存储总线，从而为远程存储设备提供数据传输和管理。iSCSI跨本地和广域网，通过分布式服务器和数组提供独立于位置的数据存储检索。</p>
<p>iSCSI优点：</p>
<ul>
<li>使用SAN摆脱了本地布线限制，促进了本地或远程数据中心的存储整合；</li>
<li>iSCSI结构是逻辑性的，仅使用软件配置来进行新的存储分配，无需其他电缆和物理磁盘；</li>
<li>iSCSI使用多个远程数据中心简化了数据复制、迁移和灾难恢复。</li>
</ul>
<h3 id="简述文件存储、块存储、对象存储？"><a href="#简述文件存储、块存储、对象存储？" class="headerlink" title="简述文件存储、块存储、对象存储？"></a>简述文件存储、块存储、对象存储？</h3><p><code>文件存储</code>：允许将数据组织为传统的文件系统。数据保存在一个文件中，该文件具有名称和一些相关的元数据，例如修改时间戳、所有者和访问权限。提供基于文件的存储使用目录和子目录的层次结构来组织文件的存储方式。</p>
<p><code>块存储</code>：块存储提供了一个像硬盘驱动器一样工作的存储卷，组织成大小相同的块。通常，要么操作系统用文件系统格式化基于块的存储卷，要么应用程序(如数据库)直接访问它来存储数据。</p>
<p><code>对象存储</code>：对象存储允许将任意数据和元数据存储为一个单元，并在平面存储池中标记为惟一标识符。使用API存储和检索数据，而不是将数据作为块或在文件系统层次结构中访问。</p>
<h2 id="虚拟平台"><a href="#虚拟平台" class="headerlink" title="虚拟平台"></a>虚拟平台</h2><h3 id="简述什么是云计算及其基本特征？"><a href="#简述什么是云计算及其基本特征？" class="headerlink" title="简述什么是云计算及其基本特征？"></a>简述什么是云计算及其基本特征？</h3><p>云计算是一种采用按量付费的模式，基于虚拟化技术，将相应计算资源（如网络、存储等）池化后，提供便捷的、高可用的、高扩展性的、按需的服务（如计算、存储、应用程序和其他 IT 资源）。</p>
<p>云计算通常有如下基本特征：</p>
<ul>
<li>自主服务：可按需的获取云端的相应资源（主要指公有云）；</li>
<li>网路访问：可随时随地使用任何联网终端设备接入云端从而使用相应资源。</li>
<li>资源池化：</li>
<li>快速弹性：可方便、快捷地按需获取和释放计算资源。</li>
<li>按量计费：</li>
</ul>
<h3 id="简述云计算常见部署模式？"><a href="#简述云计算常见部署模式？" class="headerlink" title="简述云计算常见部署模式？"></a>简述云计算常见部署模式？</h3><ul>
<li>私有云：云平台资源只给某个单位、或某部分用户内部使用。</li>
<li>公有云：云平台资源开放给社会公众服务。</li>
<li>社区云：云平台资源给几个固定的单位内使用。</li>
<li>混合云：两个或两个以上不同类型的云平台。</li>
</ul>
<h3 id="简述云计算三种服务模式？"><a href="#简述云计算三种服务模式？" class="headerlink" title="简述云计算三种服务模式？"></a>简述云计算三种服务模式？</h3><ul>
<li><code>IaaS</code>：基础设施即服务，云服务商将IT系统的基础设施（如计算资源、存储资源、网络资源）池化后作为服务进行售卖；</li>
<li><code>PaaS</code>：平台即服务，云服务商将IT系统的平台软件层（数据库、OS、中间件、运行库）作为服务进行售卖；</li>
<li><code>SaaS</code>：软件即服务，云服务商将IT系统的应用软件层作为服务进行售卖。</li>
</ul>
<h3 id="简述云计算和虚拟化的区别？"><a href="#简述云计算和虚拟化的区别？" class="headerlink" title="简述云计算和虚拟化的区别？"></a>简述云计算和虚拟化的区别？</h3><ul>
<li>云计算：IT能力服务化，按需使用，按量计费，多租户隔离，是一个系统的轻量级管理控制面。</li>
<li>虚拟化：环境隔离，资源复用，降低隔离损耗，提升运行性能，提供高级虚拟化特性。</li>
</ul>
<p>虚拟化是实现云计算的技术支撑之一，但并非云计算的核心关注点。</p>
<h3 id="简述私有云相对公有云有哪些优势？"><a href="#简述私有云相对公有云有哪些优势？" class="headerlink" title="简述私有云相对公有云有哪些优势？"></a>简述私有云相对公有云有哪些优势？</h3><ul>
<li>数据安全性更高；</li>
<li>可节省上云迁移过程中的大量成本；</li>
<li>业务快速部署，缩短业务周期；</li>
<li>降低企业成本，自主可控。</li>
</ul>
<h3 id="简述什么是KVM？"><a href="#简述什么是KVM？" class="headerlink" title="简述什么是KVM？"></a>简述什么是KVM？</h3><p>KVM指基于内核的虚拟机（Kernel-based Virtual Machine），它是一个Linux的一个内核模块，该内核模块使得Linux变成了一个 Hypervisor，从而实现虚拟化：</p>
<ul>
<li>它由 Quramnet 开发，该公司于 2008年被 Red Hat 收购。</li>
<li>它支持 x86 (32 and 64 位)、s390、Powerpc 等 CPU。</li>
<li>它从 Linux 2.6.20 起就作为一模块被包含在 Linux 内核中。</li>
<li>它需要支持虚拟化扩展的 CPU。</li>
<li>它是完全开源的。</li>
</ul>
<h2 id="系统管理"><a href="#系统管理" class="headerlink" title="系统管理"></a>系统管理</h2><h3 id="简述Rsync及其特点？"><a href="#简述Rsync及其特点？" class="headerlink" title="简述Rsync及其特点？"></a>简述Rsync及其特点？</h3><p>Rsync是Linux系统中的数据镜像备份工具，通过rsync可以将本地系统数据通过网络备份到任何远程主机上。rysnc不仅仅能对不同位置的文件和目录进行同步，还可以差异计算，压缩传输文件来最小化数据传输，和cp命令相比，rysnc的优势在于高效的差异算法。并且，rysnc还支持网络数据传输，在复制文件的同时，会把源端与目的端的文件进行比较，只有当文件不一样的时候在进行复制。具有以下特性：</p>
<ul>
<li>可以镜像保存整个目录树和文件系统。</li>
<li>可以同步增量数据，文件传输效率高，同步时间短。</li>
<li>可以保留原有文件的权限、时间等属性。</li>
<li>加密传输数据，保证了数据的安全性。</li>
</ul>
<h3 id="简述iptables规则工作过程？"><a href="#简述iptables规则工作过程？" class="headerlink" title="简述iptables规则工作过程？"></a>简述iptables规则工作过程？</h3><p>iptables防火墙是一层层过滤的，实际是按照配置规则的顺序从上到下，从前到后进行过滤的。</p>
<p>如果匹配上了规则，即明确表明是阻止还是通过，此时数据包就不能向下匹配新规则了。</p>
<p>如果所有规则中没有明确表明是阻止还是通过这个数据包，也就是没有匹配上规则，向下进行匹配，直到匹配默认规则得到明确的阻止还是通过。</p>
<p>防火墙的默认规则是对应链的所有的规则执行完才会执行的，即最后执行的规则。</p>
<h3 id="简述iptables有几个链、表及每个表的作用？"><a href="#简述iptables有几个链、表及每个表的作用？" class="headerlink" title="简述iptables有几个链、表及每个表的作用？"></a>简述iptables有几个链、表及每个表的作用？</h3><p>iptables有5个链：<code>PREROUTING</code>、<code>INPUT</code>、<code>FORWARD</code>、<code>OUTPUT</code>、<code>POSTROUTING</code>。</p>
<p>iptables有4个表：<code>Filter</code>、<code>NAT</code>、<code>Mangle</code>、<code>RAW</code>。</p>
<ul>
<li><p><code>Filter</code>：主要和主机自身有关，真正负责主机防火墙功能（过滤流入流出主机的数据包）。filter表是iptables默认使用的表。filter定义了三个链（chains）：</p>
</li>
<li><ul>
<li>INPUT：负责过滤所有目标地址是本机地址的数据包，通俗的讲，就是过滤进入主机的数据包</li>
<li>FORWARD：负责转发流经主机的数据包。起转发的作用，和nat关系很大，</li>
<li>OUTPUT：处理所有源地址是本机地址的数据包，通俗的讲，就是处理从主机发出去的数据包</li>
</ul>
</li>
</ul>
<p>对于filter表的控制是实现本机防火墙功能的重要手段，特别是对INPUT链的控制。</p>
<ul>
<li><p><code>nat</code>：负责网络地址转换，即来源与目的ip地址的port的转换，一般用于局域网共享上网或特殊的端口转换服务相关，nat功能就相当于网络的acl控制。。nat定义了三个链（chains）：</p>
</li>
<li><ul>
<li>OUTPUT：和主机发出去的数据包有关，改变主机发出数据包的目标地址。</li>
<li>PREROUTING：在数据包到达防火墙时进行路由判断之前执行的规则。作用时改变数据包的目的地址，目的端口等。</li>
<li>POSTROUTING：在数据包离开防火墙时进行路由判断之后执行的规则，作用改变数据包的源地址，源端口等。</li>
</ul>
</li>
<li><p><code>RAW</code>：RAW表只使用在PREROUTING链和OUTPUT链上，因为优先级最高，从而可以对收到的数据包在连接跟踪前进行处理。一但用户使用了RAW表，在某个链上，RAW表处理完后，将跳过NAT表和 ip_conntrack处理，即不再做地址转换和数据包的链接跟踪处理了。RAW表可以应用在那些不需要做nat的情况下，以提高性能。如大量访问的web服务器，可以让80端口不再让iptables做数据包的链接跟踪处理，以提高用户的访问速度。</p>
</li>
<li><p><code>Mangle</code>：实现流量整形，主要用于修改数据包的ToS( Type of Service ，服务类型）、TTL(Time toLive，生存周期）以及为数据包设置 Mark 标记，以实现 QoS(Quality of Service，服务质量）调整以及策略路由等应用。</p>
</li>
</ul>
<h3 id="简述iptables各个表的优先级？"><a href="#简述iptables各个表的优先级？" class="headerlink" title="简述iptables各个表的优先级？"></a>简述iptables各个表的优先级？</h3><p>4个表的优先级由高到低的顺序为：raw–&gt;mangle–&gt;nat–&gt;filter。</p>
<h3 id="简述iptables处理经过的数据包的流程？"><a href="#简述iptables处理经过的数据包的流程？" class="headerlink" title="简述iptables处理经过的数据包的流程？"></a>简述iptables处理经过的数据包的流程？</h3><p>iptables利用表和链处理每个经过的数据包，具体流程（步骤）如下：</p>
<ul>
<li>1、数据包到达网络接口，比如 eth0。</li>
<li>2、进入 raw 表的 PREROUTING 链，这个链的作用是在连接跟踪之前处理数据包。</li>
<li>3、如果进行了连接跟踪，则进行处理。</li>
<li>4、进入 mangle 表的 PREROUTING 链，在此可以修改数据包，比如 TOS 等。</li>
<li>5、进入 nat 表的 PREROUTING 链，可以在此做DNAT，但不做过滤。</li>
<li>6、决定路由，看是交给本地主机还是转发给其它主机，即决定是否继续往内还是往外。</li>
</ul>
<p>到了这里需要分<code>两种不同</code>的情况进行讨论了。</p>
<ul>
<li><p>若数据包决定要转发给其它主机，这时候它会依次经过：</p>
</li>
<li><ul>
<li>1、进入 mangle 表的 FORWARD 链，这里是在第一次路由（即步骤6）决定之后，在进行最后的路由决定之前，仍然可以对数据包进行某些修改。</li>
<li>2、进入 filter 表的 FORWARD 链，这里可以对所有转发的数据包进行过滤。</li>
<li>3、进入 mangle 表的 POSTROUTING 链，这里将完成了所有的路由决定，但数据包仍然在本地主机，还可以进行某些修改。</li>
<li>4、进入 nat 表的 POSTROUTING 链，这里一般都是用来做 SNAT ，不在这里进行过滤。</li>
<li>5、进入出去的网络接口，然后进行发送。</li>
</ul>
</li>
<li><p>另一种情况是，数据包就是发给本地主机的，那么它会依次穿过：</p>
</li>
<li><ul>
<li>1、进入 mangle 表的 INPUT 链，这里是在第一次路由（即步骤6）决定之后，在进行最后的路由决定之前，仍然可以对数据包进行某些修改。</li>
<li>2、进入 filter 表的 INPUT 链，这里可以对流入的所有数据包进行过滤，无论它来自哪个网络接口。</li>
<li>3、交给本地主机的应用程序进行处理。</li>
<li>4、处理完毕后进行路由决定，看该往那里发出。</li>
<li>5、进入 raw 表的 OUTPUT 链，这里是在连接跟踪处理本地的数据包之前。</li>
<li>6、连接跟踪对本地的数据包进行处理。</li>
<li>7、进入 mangle 表的 OUTPUT 链，这里可以修改数据包，但不做过滤。</li>
<li>8、进入 nat 表的 OUTPUT 链，可以对防火墙自己发出的数据做 NAT 。</li>
<li>9、再次进行路由决定。</li>
<li>10、进入 filter 表的 OUTPUT 链，可以对本地出去的数据包进行过滤。</li>
<li>11、进入 mangle 表的 POSTROUTING 链，同上一种情况的第9步。</li>
<li>12、进入 nat 表的 POSTROUTING 链，同上一种情况的第10步。</li>
<li>13、进入出去的网络接口，然后进行发送。</li>
</ul>
</li>
</ul>
<blockquote>
<ul>
<li>作者：木二</li>
<li>链接：<a target="_blank" rel="noopener" href="https://www.yuque.com/docs/share/d3dd1e8e-6828-4da7-9e30-6a4f45c6fa8e">https://www.yuque.com/docs/share/d3dd1e8e-6828-4da7-9e30-6a4f45c6fa8e</a></li>
</ul>
</blockquote>
 
      <!-- reward -->
      
      <div id="reword-out">
        <div id="reward-btn">
          打赏
        </div>
      </div>
      
    </div>
    

    <!-- copyright -->
    
    <div class="declare">
      <ul class="post-copyright">
        <li>
          <i class="ri-copyright-line"></i>
          <strong>版权声明： </strong>
          
          本博客所有文章除特别声明外，著作权归作者所有。转载请注明出处！
          
        </li>
      </ul>
    </div>
    
    <footer class="article-footer">
       
<div class="share-btn">
      <span class="share-sns share-outer">
        <i class="ri-share-forward-line"></i>
        分享
      </span>
      <div class="share-wrap">
        <i class="arrow"></i>
        <div class="share-icons">
          
          <a class="weibo share-sns" href="javascript:;" data-type="weibo">
            <i class="ri-weibo-fill"></i>
          </a>
          <a class="weixin share-sns wxFab" href="javascript:;" data-type="weixin">
            <i class="ri-wechat-fill"></i>
          </a>
          <a class="qq share-sns" href="javascript:;" data-type="qq">
            <i class="ri-qq-fill"></i>
          </a>
          <a class="douban share-sns" href="javascript:;" data-type="douban">
            <i class="ri-douban-line"></i>
          </a>
          <!-- <a class="qzone share-sns" href="javascript:;" data-type="qzone">
            <i class="icon icon-qzone"></i>
          </a> -->
          
          <a class="facebook share-sns" href="javascript:;" data-type="facebook">
            <i class="ri-facebook-circle-fill"></i>
          </a>
          <a class="twitter share-sns" href="javascript:;" data-type="twitter">
            <i class="ri-twitter-fill"></i>
          </a>
          <a class="google share-sns" href="javascript:;" data-type="google">
            <i class="ri-google-fill"></i>
          </a>
        </div>
      </div>
</div>

<div class="wx-share-modal">
    <a class="modal-close" href="javascript:;"><i class="ri-close-circle-line"></i></a>
    <p>扫一扫，分享到微信</p>
    <div class="wx-qrcode">
      <img src="//api.qrserver.com/v1/create-qr-code/?size=150x150&data=http://example.com/2020/11/11/interview/IT%E8%BF%90%E7%BB%B4%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1%E3%80%81%E7%A3%81%E7%9B%98%E7%AE%A1%E7%90%86%E3%80%81%E8%99%9A%E6%8B%9F%E5%B9%B3%E5%8F%B0%E5%92%8C%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/" alt="微信分享二维码">
    </div>
</div>

<div id="share-mask"></div>  
  <ul class="article-tag-list" itemprop="keywords"><li class="article-tag-list-item"><a class="article-tag-list-link" href="/tags/interview/" rel="tag">interview</a></li></ul>

    </footer>
  </div>

   
  <nav class="article-nav">
    
      <a href="/2020/11/11/interview/IT%E8%BF%90%E7%BB%B4%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93-Linux%E5%9F%BA%E7%A1%80/" class="article-nav-link">
        <strong class="article-nav-caption">上一篇</strong>
        <div class="article-nav-title">
          
            IT运维面试问题总结-Linux基础.md
          
        </div>
      </a>
    
    
      <a href="/2020/11/11/k8s/Jenkis%20pipeline%E7%BC%96%E5%86%99podTemplate%E5%AE%9E%E7%8E%B0%E5%92%8Ck8s%E5%AF%B9%E6%8E%A5/" class="article-nav-link">
        <strong class="article-nav-caption">下一篇</strong>
        <div class="article-nav-title">Jenkis pipeline编写podTemplate实现和k8s对接.md</div>
      </a>
    
  </nav>

   
<!-- valine评论 -->
<div id="vcomments-box">
  <div id="vcomments"></div>
</div>
<script src="//cdn1.lncld.net/static/js/3.0.4/av-min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/valine@1.4.14/dist/Valine.min.js"></script>
<script>
  new Valine({
    el: "#vcomments",
    app_id: "",
    app_key: "",
    path: window.location.pathname,
    avatar: "monsterid",
    placeholder: "给我的文章加点评论吧~",
    recordIP: true,
  });
  const infoEle = document.querySelector("#vcomments .info");
  if (infoEle && infoEle.childNodes && infoEle.childNodes.length > 0) {
    infoEle.childNodes.forEach(function (item) {
      item.parentNode.removeChild(item);
    });
  }
</script>
<style>
  #vcomments-box {
    padding: 5px 30px;
  }

  @media screen and (max-width: 800px) {
    #vcomments-box {
      padding: 5px 0px;
    }
  }

  #vcomments-box #vcomments {
    background-color: #fff;
  }

  .v .vlist .vcard .vh {
    padding-right: 20px;
  }

  .v .vlist .vcard {
    padding-left: 10px;
  }
</style>

 
     
</article>

</section>
      <footer class="footer">
  <div class="outer">
    <ul>
      <li>
        Copyrights &copy;
        2015-2020
        <i class="ri-heart-fill heart_icon"></i> TzWind
      </li>
    </ul>
    <ul>
      <li>
        
        
        
        由 <a href="https://hexo.io" target="_blank">Hexo</a> 强力驱动
        <span class="division">|</span>
        主题 - <a href="https://github.com/Shen-Yu/hexo-theme-ayer" target="_blank">Ayer</a>
        
      </li>
    </ul>
    <ul>
      <li>
        
        
        <span>
  <span><i class="ri-user-3-fill"></i>访问人数:<span id="busuanzi_value_site_uv"></span></s>
  <span class="division">|</span>
  <span><i class="ri-eye-fill"></i>浏览次数:<span id="busuanzi_value_page_pv"></span></span>
</span>
        
      </li>
    </ul>
    <ul>
      
    </ul>
    <ul>
      
    </ul>
    <ul>
      <li>
        <!-- cnzz统计 -->
        
        <script type="text/javascript" src='https://s9.cnzz.com/z_stat.php?id=1278069914&amp;web_id=1278069914'></script>
        
      </li>
    </ul>
  </div>
</footer>
      <div class="float_btns">
        <div class="totop" id="totop">
  <i class="ri-arrow-up-line"></i>
</div>

<div class="todark" id="todark">
  <i class="ri-moon-line"></i>
</div>

      </div>
    </main>
    <aside class="sidebar on">
      <button class="navbar-toggle"></button>
<nav class="navbar">
  
  <div class="logo">
    <a href="/"><img src="/images/ayer-side.svg" alt="Hexo"></a>
  </div>
  
  <ul class="nav nav-main">
    
    <li class="nav-item">
      <a class="nav-item-link" href="/">主页</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/archives">归档</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/categories">分类</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/tags">标签</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" target="_blank" rel="noopener" href="http://www.baidu.com">百度</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/friends">友链</a>
    </li>
    
    <li class="nav-item">
      <a class="nav-item-link" href="/2019/about">关于我</a>
    </li>
    
  </ul>
</nav>
<nav class="navbar navbar-bottom">
  <ul class="nav">
    <li class="nav-item">
      
      <a class="nav-item-link nav-item-search"  title="搜索">
        <i class="ri-search-line"></i>
      </a>
      
      
      <a class="nav-item-link" target="_blank" href="/atom.xml" title="RSS Feed">
        <i class="ri-rss-line"></i>
      </a>
      
    </li>
  </ul>
</nav>
<div class="search-form-wrap">
  <div class="local-search local-search-plugin">
  <input type="search" id="local-search-input" class="local-search-input" placeholder="Search...">
  <div id="local-search-result" class="local-search-result"></div>
</div>
</div>
    </aside>
    <script>
      if (window.matchMedia("(max-width: 768px)").matches) {
        document.querySelector('.content').classList.remove('on');
        document.querySelector('.sidebar').classList.remove('on');
      }
    </script>
    <div id="mask"></div>

<!-- #reward -->
<div id="reward">
  <span class="close"><i class="ri-close-line"></i></span>
  <p class="reward-p"><i class="ri-cup-line"></i>请我喝杯咖啡吧~</p>
  <div class="reward-box">
    
    
  </div>
</div>
    
<script src="/js/jquery-2.0.3.min.js"></script>


<script src="/js/lazyload.min.js"></script>

<!-- Tocbot -->


<script src="/js/tocbot.min.js"></script>

<script>
  tocbot.init({
    tocSelector: '.tocbot',
    contentSelector: '.article-entry',
    headingSelector: 'h1, h2, h3, h4, h5, h6',
    hasInnerContainers: true,
    scrollSmooth: true,
    scrollContainer: 'main',
    positionFixedSelector: '.tocbot',
    positionFixedClass: 'is-position-fixed',
    fixedSidebarOffset: 'auto'
  });
</script>

<script src="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-modal@0.9.2/jquery.modal.min.css">
<script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.7.0/dist/js/jquery.justifiedGallery.min.js"></script>

<script src="/dist/main.js"></script>

<!-- ImageViewer -->

<!-- Root element of PhotoSwipe. Must have class pswp. -->
<div class="pswp" tabindex="-1" role="dialog" aria-hidden="true">

    <!-- Background of PhotoSwipe. 
         It's a separate element as animating opacity is faster than rgba(). -->
    <div class="pswp__bg"></div>

    <!-- Slides wrapper with overflow:hidden. -->
    <div class="pswp__scroll-wrap">

        <!-- Container that holds slides. 
            PhotoSwipe keeps only 3 of them in the DOM to save memory.
            Don't modify these 3 pswp__item elements, data is added later on. -->
        <div class="pswp__container">
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
            <div class="pswp__item"></div>
        </div>

        <!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
        <div class="pswp__ui pswp__ui--hidden">

            <div class="pswp__top-bar">

                <!--  Controls are self-explanatory. Order can be changed. -->

                <div class="pswp__counter"></div>

                <button class="pswp__button pswp__button--close" title="Close (Esc)"></button>

                <button class="pswp__button pswp__button--share" style="display:none" title="Share"></button>

                <button class="pswp__button pswp__button--fs" title="Toggle fullscreen"></button>

                <button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>

                <!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
                <!-- element will get class pswp__preloader--active when preloader is running -->
                <div class="pswp__preloader">
                    <div class="pswp__preloader__icn">
                        <div class="pswp__preloader__cut">
                            <div class="pswp__preloader__donut"></div>
                        </div>
                    </div>
                </div>
            </div>

            <div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
                <div class="pswp__share-tooltip"></div>
            </div>

            <button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
            </button>

            <button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
            </button>

            <div class="pswp__caption">
                <div class="pswp__caption__center"></div>
            </div>

        </div>

    </div>

</div>

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.css">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/default-skin/default-skin.min.css">
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/photoswipe@4.1.3/dist/photoswipe-ui-default.min.js"></script>

<script>
    function viewer_init() {
        let pswpElement = document.querySelectorAll('.pswp')[0];
        let $imgArr = document.querySelectorAll(('.article-entry img:not(.reward-img)'))

        $imgArr.forEach(($em, i) => {
            $em.onclick = () => {
                // slider展开状态
                // todo: 这样不好，后面改成状态
                if (document.querySelector('.left-col.show')) return
                let items = []
                $imgArr.forEach(($em2, i2) => {
                    let img = $em2.getAttribute('data-idx', i2)
                    let src = $em2.getAttribute('data-target') || $em2.getAttribute('src')
                    let title = $em2.getAttribute('alt')
                    // 获得原图尺寸
                    const image = new Image()
                    image.src = src
                    items.push({
                        src: src,
                        w: image.width || $em2.width,
                        h: image.height || $em2.height,
                        title: title
                    })
                })
                var gallery = new PhotoSwipe(pswpElement, PhotoSwipeUI_Default, items, {
                    index: parseInt(i)
                });
                gallery.init()
            }
        })
    }
    viewer_init()
</script>

<!-- MathJax -->

<!-- Katex -->

<!-- busuanzi  -->


<script src="/js/busuanzi-2.3.pure.min.js"></script>


<!-- ClickLove -->

<!-- ClickBoom1 -->

<!-- ClickBoom2 -->

<!-- CodeCopy -->


<link rel="stylesheet" href="/css/clipboard.css">

<script src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js"></script>
<script>
  function wait(callback, seconds) {
    var timelag = null;
    timelag = window.setTimeout(callback, seconds);
  }
  !function (e, t, a) {
    var initCopyCode = function(){
      var copyHtml = '';
      copyHtml += '<button class="btn-copy" data-clipboard-snippet="">';
      copyHtml += '<i class="ri-file-copy-2-line"></i><span>COPY</span>';
      copyHtml += '</button>';
      $(".highlight .code pre").before(copyHtml);
      $(".article pre code").before(copyHtml);
      var clipboard = new ClipboardJS('.btn-copy', {
        target: function(trigger) {
          return trigger.nextElementSibling;
        }
      });
      clipboard.on('success', function(e) {
        let $btn = $(e.trigger);
        $btn.addClass('copied');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-checkbox-circle-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPIED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-checkbox-circle-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
      clipboard.on('error', function(e) {
        e.clearSelection();
        let $btn = $(e.trigger);
        $btn.addClass('copy-failed');
        let $icon = $($btn.find('i'));
        $icon.removeClass('ri-file-copy-2-line');
        $icon.addClass('ri-time-line');
        let $span = $($btn.find('span'));
        $span[0].innerText = 'COPY FAILED';
        
        wait(function () { // 等待两秒钟后恢复
          $icon.removeClass('ri-time-line');
          $icon.addClass('ri-file-copy-2-line');
          $span[0].innerText = 'COPY';
        }, 2000);
      });
    }
    initCopyCode();
  }(window, document);
</script>


<!-- CanvasBackground -->


    
  </div>
</body>

</html>